<!DOCTYPE HTML>
<html>
<head>
<title>#HotkeyModifierTimeout | AutoHotkey</title>
<meta name="description" content="The #HotkeyModifierTimeout directive affects the behavior of the hotkey modifiers CTRL, ALT, WIN, and SHIFT." />
<meta name="ahk:equiv-v2" content="lib/A_HotkeyModifierTimeout.htm" />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>#HotkeyModifierTimeout</h1>

<p>影响<a href="../Hotkeys.htm">热键</a>修饰符的行为: <kbd>Ctrl</kbd>, <kbd>Alt</kbd>, <kbd>Win</kbd> 和 <kbd>Shift</kbd>.</p>

<pre class="Syntax"><span class="func">#HotkeyModifierTimeout</span> Milliseconds</pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>Milliseconds</dt>
  <dd><p>间隔长度, 单位为毫秒. 此值设为 -1 时, 它永远不会超时(在 Send 后修饰键总是被推回到按下的状态), 设为 0 时则总是超时(修饰键总是不会被推回到按下的状态).</p></dd>

</dl>
<h2 id="Remarks">备注</h2>
<p>在下列情况中 <strong>不需要</strong> 使用此指令:</p>
<ul>
  <li>热键通过 <a href="Send.htm#SendInput">SendInput</a> 或 <a href="Send.htm#SendPlay">SendPlay</a> 模式发送键击. 这是由于这些模式会延迟用户的物理键击到 Send 完成后.</li>
  <li>脚本安装了键盘钩子(您可以通过主窗口中的 "View-&gt;Key history" 菜单项或 <a href="KeyHistory.htm">KeyHistory</a> 命令判断您的脚本是否使用了钩子). 这是由于钩子可以记录用户实际按住的修饰键(<kbd>Alt</kbd>/<kbd>Ctrl</kbd>/<kbd>Win</kbd>/<kbd>Shift</kbd>), 因而不需要使用超时.</li>
</ul>
<p>为了说明此指令的效果, 请看这个例子: <code>^!a::Send, abc</code>.</p>
<p>执行 <a href="Send.htm">Send</a> 命令时, 它会首先释放 <kbd>Ctrl</kbd> 和 <kbd>Alt</kbd>, 这样才能正确发送这些字符. 在发送所有键击后, 此命令不知道它是否可以安全的推回 <kbd>Ctrl</kbd> 和 <kbd>Alt</kbd> 到原来的按下状态(为了和用户仍然按住它们相匹配). 但是如果流逝的时间小于指定的毫秒数, 那么它会认为用户还没有释放按键并把它们推回到按下的状态以匹配物理状态. 否则, 修饰键不会被推回到按下的状态, 而用户必须再次按下它们来修饰同一个或其他的按键.</p>
<p>超时的时间值应该设置为小于用户在释放热键修饰符前按住它们的时间. 否则, 即使用户已经释放了修饰键时它们仍可能被恢复到按下的状态(卡住).</p>
<p>在下列情况中您可以减少或不使用此指令:</p>
<ul>
  <li>在脚本的任意位置添加 <a href="_InstallKeybdHook.htm">#InstallKeybdHook</a> 来安装键盘钩子.</li>
  <li>使用 <a href="Send.htm#SendInput">SendInput</a> 或 <a href="Send.htm#SendPlay">SendPlay</a> 模式而不使用传统的 <a href="Send.htm#SendEvent">SendEvent</a> 模式.</li>
  <li>使用传统的 <a href="Send.htm#SendEvent">SendEvent</a> 模式时, 减小 <a href="SetKeyDelay.htm">SetKeyDelay</a> 为 0 或 -1, 这样可以快速发送键击因而会有些帮助.</li>
</ul>
<p>如果脚本中未使用此指令, 那么它会表现的就像此设置为 50.</p>
<p>和其他指令一样, #HotkeyModifierTimeout 不能有条件地执行.</p>
<h2 id="Related">相关</h2>
<p><a href="GetKeyState.htm">GetKeyState</a></p>
<h2 id="Examples">示例</h2>
<div class="ex" id="ExBasic">
<p><a class="ex_number" href="#ExBasic"></a> 将热键修饰符超时设置为 100 毫秒, 而不是 50 毫秒.</p>
<pre class="NoIndent">#HotkeyModifierTimeout 100</pre>
</div>

</body>
</html>